// 文件名：index.ts
// 作者：系统自动生成
// 创建日期：2025-04-26
// 描述：前端路由配置文件，定义页面路由规则和权限控制

import { createRouter, createWebHistory } from 'vue-router'
import { useAuthStore } from '../stores/auth'

// 定义路由元信息类型
declare module 'vue-router' {
  interface RouteMeta {
    requiresAuth: boolean
    roles?: string[]
  }
}

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    // 登录路由
    {
      path: '/login',
      name: 'Login',
      component: () => import('@/views/LoginView.vue'),
      meta: {
        requiresAuth: false, // 不需要登录
        roles: [] // 所有角色可访问
      }
    },
    // 首页路由
    {
      path: '/',
      name: 'Home',
      component: () => import('@/views/HomeView.vue'),
      meta: {
        requiresAuth: true, // 需要登录
        roles: ['admin', 'teacher', 'parent'] // 允许的角色
      }
    },
    // 校区管理路由
    {
      path: '/campus',
      name: 'Campus',
      component: () => import('@/views/CampusView.vue'),
      meta: {
        requiresAuth: true,
        roles: ['admin'] // 仅管理员可访问
      }
    },
    // 数据导入路由
    {
      path: '/import',
      name: 'Import',
      component: () => import('@/views/ImportView.vue'),
      meta: {
        requiresAuth: true,
        roles: ['admin', 'teacher'] // 管理员和教师可访问
      }
    },
    // 学生管理路由
    {
      path: '/students',
      name: 'Students',
      component: () => import('@/views/StudentView.vue'),
      meta: {
        requiresAuth: true,
        roles: ['admin', 'teacher'] // 管理员和教师可访问
      }
    },
    // 教师管理路由
    {
      path: '/teachers',
      name: 'Teachers',
      component: () => import('@/views/TeacherView.vue'),
      meta: {
        requiresAuth: true,
        roles: ['admin'] // 仅管理员可访问
      }
    },
    // 成绩管理路由
    {
      path: '/scores',
      name: 'Scores',
      component: () => import('@/views/GradeView.vue'),
      meta: {
        requiresAuth: true,
        roles: ['admin', 'teacher'] // 管理员和教师可访问
      }
    },
    // 考勤管理路由
    {
      path: '/attendance',
      name: 'Attendance',
      component: () => import('@/views/ImportView.vue'),
      meta: {
        requiresAuth: true,
        roles: ['admin', 'teacher'] // 管理员和教师可访问
      }
    },
    // 通知公告路由
    {
      path: '/notices',
      name: 'Notices',
      component: () => import('@/views/AboutView.vue'),
      meta: {
        requiresAuth: true,
        roles: ['admin', 'teacher', 'parent'] // 所有角色可访问
      }
    },
    // 404路由
    {
      path: '/:pathMatch(.*)*',
      name: 'NotFound',
      component: () => import('@/views/NotFoundView.vue'),
      meta: {
        requiresAuth: false
      }
    }
  ]
})

// 路由守卫 - 权限控制
router.beforeEach((to, from, next) => {
  const authStore = useAuthStore()
  
  // 检查路由是否需要认证
  if (to.meta.requiresAuth && !authStore.isAuthenticated) {
    // 未登录用户重定向到登录页
    next({ name: 'Login', query: { redirect: to.fullPath } })
    return
  }
  
  // 检查用户角色权限
  if (to.meta.roles && to.meta.roles.length > 0) {
    const hasPermission = to.meta.roles.some(role => 
      authStore.userRoles.includes(role)
    )
    
    if (!hasPermission) {
      // 无权限用户重定向到首页
      console.log('无权限访问:', to.path, '当前角色:', authStore.userRoles)
      next({ name: 'Home' })
      return
    }
  }
  
  next()
})

export default router
